-
Notifications
You must be signed in to change notification settings - Fork 0
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Template namespaces #16
base: main
Are you sure you want to change the base?
Conversation
Is there a way we can remove the hardcoded vendor path in the following? ['layout' => $this->environment->path('vendor/example/layout-lib/src/main/handlebars')] Maybe something like |
If a library wants to use another library, it would need to know the namespace under which this other library was imported into the application. For example: new TemplatesFrom($this->environment->path('src/main/handlebars'), [
'layout' => $this->environment->path('vendor/example/layout-lib/src/main/handlebars'),
'common' => $this->environment->path('vendor/example/common-lib/src/main/handlebars'),
]); Is there a way we can make this work without relying on documentation stating something along the lines of this library expects the First idea: by using the unique new TemplatesFrom($this->environment->path('src/main/handlebars'), [
'example/layout-lib' => $this->environment->path('vendor/example/layout-lib/src/main/handlebars'),
'example/common-lib' => $this->environment->path('vendor/example/common-lib/src/main/handlebars'),
]);
// Or maybe even shorter, see question above about removing hardcoded "vendor" path...
new TemplatesFrom($this->environment->path('src/main/handlebars'), [
new Library('example/layout-lib'),
new Library('example/common-lib'),
]); ...and inside Handlebars: {{#> example/layout-lib:default}}
{{#*inline "title"}}Home{{/inline}}
{{#*inline "main"}}
<h1>Welcome</h1>
{{/inline}}
{{/example/layout-lib:default}} ...potentially including a namespace helper to shorten the names, e.g.: {{namespace layout="example/layout-lib"}}
{{#> layout:default}}
{{#*inline "title"}}Home{{/inline}}
{{#*inline "main"}}
<h1>Welcome</h1>
{{/inline}}
{{/layout:default}} |
This pull request adds support for organizing templates into namespaces. For example, an application could use a library providing the layout namespace.
Example
The application uses the TemplatesFrom class instead of directly passing the file path to the Handlebars class:
The default.handlebars template in the layout library:
The home.handlebars templates references this via the
namespace:name
notation: